package br.com.vti.sisp_sicrim.antigo.model;

import java.io.Serializable;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.vti.sisp_sicrim.antigo.dao.DidRgDAO;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;

@SuppressWarnings("serial")
public class DidRg implements Serializable {

	private String id = "";
	private Long numeroRg = 0L;
	private Integer dataAtualizacao = 0;
	private Integer horaAtualizacao = 0;
	private String flag = "";
	private String polegarDireito = "";
	private String indicadorDireito = "";
	private ResultSet consulta = null;
	private DidRgDAO didRgDAO = new DidRgDAO();

	public DidRg() {
		super();
	}

	public DidRg(String id, Long numeroRg, Integer dataAtualizacao, Integer horaAtualizacao, String flag, String polegarDireito, String indicadorDireito) {
		super();
		this.id = id;
		this.numeroRg = numeroRg;
		this.dataAtualizacao = dataAtualizacao;
		this.horaAtualizacao = horaAtualizacao;
		this.flag = flag;
		this.polegarDireito = polegarDireito;
		this.indicadorDireito = indicadorDireito;
	}

	public void grava() {

		try {
			this.id = didRgDAO.insert(numeroRg, dataAtualizacao, horaAtualizacao, flag, polegarDireito, indicadorDireito);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void atualiza() {

		try {
			didRgDAO.update(this.id, numeroRg, dataAtualizacao, horaAtualizacao, flag, polegarDireito, indicadorDireito);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public void exclui() {

		try {
			didRgDAO.delete(this.id);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
	}

	public boolean leituraDataAtualizacao(Integer pDataAtualizacao) {

		try {
			if (consulta == null) {
				consulta = didRgDAO.readDataAtualizacao(pDataAtualizacao);
			} else {
				consulta = didRgDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean consultaNumeroRg(Long pNumeroRg) {

		try {
			if (consulta == null) {
				consulta = didRgDAO.selectNumeroRg(pNumeroRg);
			} else {
				consulta = didRgDAO.pesquisaProximo();
			}
			if (consulta == null) {
				fecha();
				return false;
			}
			formataAtributos(consulta);
		} catch (Exception e) {
			throw new ExceptionProgram(e, null, "");
		}
		return true;
	}

	public boolean fimDados() {
		return !(didRgDAO.temProximo());
	}

	public void salvarQuebras() {

	}

	public void formataAtributos(ResultSet lista) {

		if (lista == null)
			return;
		try {
			this.id = lista.getString("id");
			this.numeroRg = lista.getLong("numeroRg");
			this.dataAtualizacao = lista.getInt("dataAtualizacao");
			this.horaAtualizacao = lista.getInt("horaAtualizacao");
			this.flag = lista.getString("flag");
			this.polegarDireito = lista.getString("polegarDireito");
			this.indicadorDireito = lista.getString("indicadorDireito");
		} catch (SQLException e) {
		}
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public Long getNumeroRg() {
		return numeroRg;
	}

	public void setNumeroRg(Long numeroRg) {
		this.numeroRg = numeroRg;
	}

	public Integer getDataAtualizacao() {
		return dataAtualizacao;
	}

	public void setDataAtualizacao(Integer dataAtualizacao) {
		this.dataAtualizacao = dataAtualizacao;
	}

	public Integer getHoraAtualizacao() {
		return horaAtualizacao;
	}

	public void setHoraAtualizacao(Integer horaAtualizacao) {
		this.horaAtualizacao = horaAtualizacao;
	}

	public String getFlag() {
		return flag;
	}

	public void setFlag(String flag) {
		this.flag = flag;
	}

	public String getPolegarDireito() {
		return polegarDireito;
	}

	public void setPolegarDireito(String polegarDireito) {
		this.polegarDireito = polegarDireito;
	}

	public String getIndicadorDireito() {
		return indicadorDireito;
	}

	public void setIndicadorDireito(String indicadorDireito) {
		this.indicadorDireito = indicadorDireito;
	}

	public void fecha() {
		didRgDAO.fecha();
		consulta = null;
	}

	public long registrosProcessados() {
		return didRgDAO.nroRegistro;
	}

	public long totalRegistros() {
		return didRgDAO.qtdRegistros;
	}

}
